package com.llc.mall.user.application.command.service.impl;

import com.llc.mall.common.core.exception.Mall4cloudException;
import com.llc.mall.common.core.response.ResponseEnum;
import com.llc.mall.common.core.util.BeanUtil;
import com.llc.mall.common.security.AuthUserContext;
import com.llc.mall.user.application.command.service.UserAddrAppService;
import com.llc.mall.user.application.query.dto.UserAddrDTO;
import com.llc.mall.user.application.query.service.UserAddrQueryService;
import com.llc.mall.user.temp.UserAddrService;
import com.llc.mall.user.infrastructure.persist.po.UserAddrPo;
import com.llc.mall.user.interfaces.vo.UserAddrVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Slf4j
@Service
public class UserAddrAppServiceImpl implements UserAddrAppService {

    @Autowired
    private UserAddrService userAddrService;

    @Autowired
    private UserAddrQueryService userAddrQueryService;


    private static final Integer MAX_USER_ADDR = 10;


    @Override
    public void add( UserAddrDTO userAddrDTO) {
        Long userId = AuthUserContext.get().getUserId();
        int userAddrCount = userAddrService.countByUserId(userId);
        if (userAddrCount >= MAX_USER_ADDR) {
//            return ServerResponseEntity.showFailMsg("收货地址已达到上限，无法再新增地址");
        }
        UserAddrPo userAddr = BeanUtil.map(userAddrDTO, UserAddrPo.class);
        if (userAddrCount == 0) {
            userAddr.setIsDefault(UserAddrPo.DEFAULT_ADDR);
        } else if (!UserAddrPo.DEFAULT_ADDR.equals(userAddr.getIsDefault())){
            userAddr.setIsDefault(UserAddrPo.NOT_DEFAULT_ADDR);
        }
        userAddr.setAddrId(null);
        userAddr.setUserId(userId);
        userAddrService.save(userAddr);
        // 清除默认地址缓存
        if (UserAddrPo.DEFAULT_ADDR.equals(userAddr.getIsDefault())) {
            userAddrService.removeUserDefaultAddrCacheByUserId(userId);
        }
    }

    @Override
    public void modify(UserAddrDTO userAddrDTO) {
//        Long userId = AuthUserContext.get().getUserId();
//        UserAddrVo dbUserAddr = userAddrQueryService.getUserAddrByUserId(userAddrDTO.getAddrId(), userId);
//        if (dbUserAddr == null) {
//            throw new Mall4cloudException("该地址已被删除");
//        }
//        // 默认地址不能修改为普通地址
//        else if (dbUserAddr.getIsDefault().equals(UserAddrPo.DEFAULT_ADDR) && userAddrDTO.getIsDefault().equals(UserAddrPo.NOT_DEFAULT_ADDR)) {
//            throw new Mall4cloudException(ResponseEnum.DATA_ERROR);
//        }
//        UserAddrPo userAddr = BeanUtil.map(userAddrDTO, UserAddrPo.class);
//        userAddr.setUserId(userId);
//        userAddrService.update(userAddr);
//        // 清除默认地址缓存
//        if (userAddr.getIsDefault().equals(UserAddrPo.DEFAULT_ADDR)) {
//            userAddrService.removeUserDefaultAddrCacheByUserId(userId);
//        }
    }

    @Override
    public void delete(Long addrId) {
        Long userId = AuthUserContext.get().getUserId();
//        UserAddrVo dbUserAddr = userAddrQueryService.getUserAddrByUserId(addrId, userId);
//        if (dbUserAddr == null) {
//            throw new Mall4cloudException("该地址已被删除");
//        } else if (dbUserAddr.getIsDefault().equals(UserAddrPo.DEFAULT_ADDR)) {
//            throw new Mall4cloudException("默认地址不能删除");
//        }
//        userAddrService.deleteUserAddrByUserId(addrId, userId);
    }
}
